<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        const a = {
            num: 1,
            hobbit: ['学习', '看视频', '敲代码'],
            student: {
                uname: '杨桑',
                age: '18',
                hobbit: ['打篮球', '学习', '看视频', '敲代码'],
            },
            x: undefined,
        }
        // instanceof
        function myObj(data) {
            let newObj
            // 判断是否是数组
            if (data instanceof Array) {
                newObj = []
                // 数组赋值方法
                data.forEach((e, i) => {
                    // 递归判断数组中是否存在复杂数据类型
                    newObj[i] = myObj(e)
                })
            }
            // 判断是否是对象
            else if (data instanceof Object) {
                newObj = {}
                for (let key in data) {
                    // 递归判断对象中是否有复杂数据类型
                    newObj[key] = myObj(data[key])
                }
            }
            // 普通数据
            else {
                newObj = data
            }
            return newObj
            // console.log(data)
        }
        let obj = myObj(a)

        // 测试深拷贝
        console.log('原对象：', a)
        console.log('拷贝生成新对象：', obj)
        // 修改新对象中的复杂数据类型数据
        console.log('修改新对象中的复杂数据类型数据')
        obj.hobbit[1] = '羽毛球'
        obj.student.uname = '蔡徐坤'
        obj.student.hobbit[2] = '唱歌'
        console.log('原对象：', a)
        console.log('拷贝生成新对象：', obj)
    </script>
</body>

</html>